package com.aaa.newpeculiarity8.demo04;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.*;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 演示Java.util.Comparator接口的使用场景代码，其中的抽象方法定义为：
 *  public abstract int compare(T o1,T o2)
 *  当需要对一个集合进行排序时，Collections.sort方法需要一个Comparator接口实例来指定排序的规则
 * @date 2022/11/3
 */

/**
 * 详细介绍lambda表达式
 * ·lambda引入了新的操作符 :->(箭头操作符)，->将表达式分成两部分
 * ·左侧；(参数1，参数2····)表示参数列表
 * ·右侧：{}内部是方法体
 *
 * 注意事项：
 * ·形参列表的数据类型会自动推断
 * ·如果形参列表为空，只需保留()
 * ·如果形参只有1个，()可以省略，只需要参数的名称即可
 * ·如果执行语句只有一句，且无返回值，{}可以省略，若有返回值，则若想省去{},则必须同时省略return，且执行语句也保证只有一句
 * ·Lambda不会生成一个单独的内部类文件
 *
 */
public class Test01 {
    public static void main(String[] args) {
        List<Student> list=new ArrayList<>();
        list.add(new Student("吴亦凡",66));
        list.add(new Student("李易峰",66));
        list.add(new Student("张艺兴",77));
        list.add(new Student("成龙",88));

        //List<T> list,要排序的集合
        //comparator<? super T> c 指明排序的规则
        /*Comparator<Student> comparator=new Comparator<Student>() {
            //返回0 表示o1和o2 相同 返回大于0
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge()-o2.getAge();
            }
        };*/
        Comparator<Student> comparator= ((o1, o2) -> {
            return o2.getAge()-o1.getAge();
        });
        Collections.sort(list,comparator);
        for (Student student : list) {
            System.out.println(student);
        }

    }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Student{
    private String name;
    private Integer age;
}